#!/bin/bash
:<<!
command > file 将输出重定向到file
command < file 将输入重定向到file
command >> file 将输出以追加的方式重定向到file
n > file 将文件描述符为n的文件重定向到file
n >> file 将文件描述符为n的文件以追加的方式重定向到file
n >& m 将输出文件m和n合并
n <& m 将输入文件m和n合并
<< tag 将开始标记tag和结束标记tag之间的内容作为输入
note:
文件描述符
0：标准输入 stdin
1：标准输出 stdout
2：标准错误输出 stderr
!
echo "测试文本" > file.txt
:<<!
1.上面这个命令将输出内容存入file.txt，任何file.txt内的已经存在的内容被新内容替代，
如果要将新内容添加在文件末尾，使用>>操作符追加文本内容
!

echo "追加文本" >> file.txt

# 统计file.txt的行数
wc -l file.txt # 输出行数的同时会输出文件名
# 输入重定向到file.txt，统计行数
wc -l < file.txt # 只输出行数，不输出文件名，因为它仅仅知道从标准输入读取内容

# 标准输出文件重定向到file.txt文件
command 1>file

# 将标准错误文件stderr追加到file文件末尾
command 2>>file.txt

:<<!
特殊重定向：here document
基本形式：
command << delimiter
  document
delimiter

备注:
1.结尾的delimiter一定要顶格写，前面不能有任何字符，后面也不能有任何字符，包括空格和tab缩进
2.开始的delimiter前后的空格会被忽略掉
!
# 通过wc -l命令计算
wc -l << EOF
  测试文本
  test
EOF
# 输出行数2

cat << EOF
  测试文本1
  test1
EOF

# /dev/null文件
# 执行命令又不希望在屏幕上显示输出结果，可以将输出重定向到/dev/null
:<<!
/dev/null是一个特殊的文件，写入到它的内容都会被丢弃，如果尝试从该文件读取内容，那么
什么也读不到，但是/dev/null文件非常有用，将命令的输出重定向到它，会起到“禁止输出”
的效果
!
# 屏蔽stdout 和stderr
# command > dev/null 2>&1
# 2>之间不可以有空格，2>是一体的时候才表示错误输出

